import axios from 'axios';
import { useTokenStore } from '@/stores/token';

// 创建 axios 实例
const service = axios.create({
    baseURL: '/api', // 指向代理路径
    timeout: 10000
});

// 请求拦截器 - 添加 token 和设置正确的Content-Type
service.interceptors.request.use(
    (config) => {
        const tokenStore = useTokenStore();
        if (tokenStore.token) {
            config.headers['Authorization'] = `Bearer ${tokenStore.token}`;
        }

        // 确保Content-Type根据请求类型正确设置
        // 对于POST/PUT请求，默认使用application/json
        if (!config.headers['Content-Type']) {
            if (['post', 'put', 'patch'].includes(config.method)) {
                config.headers['Content-Type'] = 'application/json';
            }
        }

        // 调试输出：检查请求配置
        console.log('[Request Interceptor] Config:', {
            method: config.method,
            url: config.url,
            headers: config.headers,
            data: config.data,
            params: config.params
        });

        return config;
    },
    (error) => {
        console.error('[Request Error]', error);
        return Promise.reject(error);
    }
);

// 响应拦截器 - 处理错误
service.interceptors.response.use(
    (response) => {
        // 调试输出：检查响应数据
        console.log('[Response Interceptor] Response:', {
            status: response.status,
            data: response.data
        });

        return response.data;
    },
    (error) => {
        console.error('[Response Error]', error);

        if (error.response) {
            switch (error.response.status) {
                case 401:
                    const tokenStore = useTokenStore();
                    tokenStore.removeToken();
                    // 重定向到登录页
                    window.location.href = '/login';
                    break;
                case 403:
                    console.error('无权限访问');
                    break;
                case 404:
                    console.error('请求资源不存在');
                    break;
                case 500:
                    console.error('服务器内部错误');
                    break;
                default:
                    console.error('未知错误');
            }
        }

        return Promise.reject(error);
    }
);

export default service;